package analizadorLexico.estados;

import analizadorLexico.tokens.Token;
import analizadorLexico.tokens.TokenOP1;
import analizadorLexico.tokens.TokenOP4;

public class Estado44 implements Estado{
/*aplico el patron singleton para cada estado*/
	
	/*INSTANCE lo que hace es guardar la instancia de la clase*/
	private static Estado44 INSTANCE = null;    
	private Estado44(){}
	
    private synchronized static void createInstance() {
        if (INSTANCE == null) INSTANCE = new Estado44();
    }
    
    public static Estado getInstance() {
        if (INSTANCE == null) createInstance();
        return INSTANCE;
    }

	public void irASiguienteEstado() {
		
		if(Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-IDEN"))
		{
			Contexto.addToken((Token)new TokenOP1(Contexto.getLexema(),Contexto.getLineaActual(),Contexto.getPosicionLinea()-Contexto.getLexema().length()));
		}
		
		if(Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-LITERALCARACTER")||Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-LITERALBOOLEANO")||Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-LITERALENTERO")||Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-LITERALNATURAL")||Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-LITERALREAL"))
		{
			Contexto.addToken((Token)new TokenOP1(Contexto.getLexema(),Contexto.getLineaActual(),Contexto.getPosicionLinea()-Contexto.getLexema().length()));
		}
		
		if(Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-PARCERRADO"))
		{
			Contexto.addToken((Token)new TokenOP1(Contexto.getLexema(),Contexto.getLineaActual(),Contexto.getPosicionLinea()-Contexto.getLexema().length()));
		}
		
		if(Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-IGUAL"))
		{
			Contexto.addToken((Token)new TokenOP4(Contexto.getLexema(),Contexto.getLineaActual(),Contexto.getPosicionLinea()-Contexto.getLexema().length()));
		}
		
		if(Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-OP0")||Contexto.dameUltimoToken().getTipo().equals("TOKEN-OP1")||Contexto.dameUltimoToken().getTipo().equals("TOKEN-OP2")||Contexto.dameUltimoToken().getTipo().equals("TOKEN-OP3")||Contexto.dameUltimoToken().getTipo().equals("TOKEN-OP4"))
		{
			Contexto.addToken((Token)new TokenOP4(Contexto.getLexema(),Contexto.getLineaActual(),Contexto.getPosicionLinea()-Contexto.getLexema().length()));
		}
		
		if(Contexto.dameUltimoToken().getTipo().toString().equals("TOKEN-PARABIERTO"))
		{
			Contexto.addToken((Token)new TokenOP4(Contexto.getLexema(),Contexto.getLineaActual(),Contexto.getPosicionLinea()-Contexto.getLexema().length()));
		}
		
		Contexto.setEstadoActual(EstadoInicial.getInstance());
		Contexto.resetearLexema();
	}

}
